/ `CORE_FXGE_FONTDATA_CHROMEFONTDATA_CHROMEFONTDATA_H_` 文件定义了一系列嵌入式字体数据，这些数据以常量数组的形式存储，用于在 PDFium 中提供默认字体资源。这些字体数据主要用于确保在没有外部字体可用的情况下，PDF 文档中的文本仍然可以正确显示和渲染。以下是该文件的详细解析：

### 文件概述

该文件包含多个 `std::array<uint8_t, N>` 类型的常量数组，每个数组都表示一个特定字体的字节数据。这些字体数据是预先编译好的二进制字节流，可以直接用于创建字体对象，而无需依赖外部字体文件。这种设计使得 PDFium 在不同平台上都能可靠地加载和使用这些字体，特别是在嵌入式系统或移动设备上。

### 字体数据定义

文件中定义了多个字体数据数组，每个数组对应一种特定的字体样式。以下是一些主要的字体数据定义：

1. * *等宽字体（Fixed） * *：
- `kFoxitFixedFontData`：常规等宽字体。
- `kFoxitFixedItalicFontData`：斜体等宽字体。
- `kFoxitFixedBoldFontData`：粗体等宽字体。
- `kFoxitFixedBoldItalicFontData`：粗体斜体等宽字体。

2. * *无衬线字体（Sans） * *：
- `kFoxitSansFontData`：常规无衬线字体。
- `kFoxitSansItalicFontData`：斜体无衬线字体。
- `kFoxitSansBoldFontData`：粗体无衬线字体。
- `kFoxitSansBoldItalicFontData`：粗体斜体无衬线字体。
- `kFoxitSansMMFontData`：多主无衬线字体（Multi - Master Font），允许通过参数调整字体的粗细和宽度。

3. * *有衬线字体（Serif） * *：
- `kFoxitSerifFontData`：常规有衬线字体。
- `kFoxitSerifItalicFontData`：斜体有衬线字体。
- `kFoxitSerifBoldFontData`：粗体有衬线字体。
- `kFoxitSerifBoldItalicFontData`：粗体斜体有衬线字体。
- `kFoxitSerifMMFontData`：多主有衬线字体（Multi - Master Font），允许通过参数调整字体的粗细和宽度。

4. * *符号字体 * *：
- `kFoxitSymbolFontData`：符号字体，通常用于数学符号、希腊字母等特殊字符。
- `kFoxitDingbatsFontData`：装饰符号字体，包含各种装饰性符号和图形。

### 用途

这些嵌入式字体数据的主要用途包括：

1. * *默认字体支持 * *：
- 当 PDF 文档中引用的字体在系统中不可用时，PDFium 可以使用这些嵌入式字体作为替代，确保文档中的文本能够正确显示。

2. * *跨平台一致性 * *：
- 由于这些字体数据是直接嵌入到 PDFium 代码库中的，因此它们可以在不同的操作系统和平台上保持一致的行为，避免因字体缺失或不兼容而导致的显示问题。

3. * *嵌入式系统支持 * *：
- 在某些嵌入式系统或移动设备上，可能无法安装或访问外部字体文件。通过将字体数据嵌入到代码库中，PDFium 可以在这些环境中正常工作，提供基本的字体渲染功能。

4. * *性能优化 * *：
- 嵌入式字体数据可以直接加载到内存中，减少了从外部文件加载字体的时间，提升了渲染速度，尤其是在低资源环境下。

### 实际应用

在实际应用中，这些嵌入式字体数据通常通过以下方式使用：

- **字体加载 * *：
- PDFium 在初始化时会加载这些嵌入式字体数据，并将其注册为默认字体。当需要渲染文本时，如果系统中没有找到相应的字体，PDFium 会自动使用这些嵌入式字体。

- **字体回退机制 * *：
- 如果 PDF 文档中使用的字体在系统中不可用，PDFium 会尝试使用最接近的嵌入式字体进行回退。例如，如果文档中使用了某种有衬线字体，但系统中没有该字体，PDFium 会选择 `kFoxitSerifFontData` 作为替代。

- **符号和装饰符号 * *：
- 对于包含特殊符号或装饰性符号的 PDF 文档，PDFium 可以使用 `kFoxitSymbolFontData` 和 `kFoxitDingbatsFontData` 来正确显示这些符号。

- **多主字体支持 * *：
- `kFoxitSerifMMFontData` 和 `kFoxitSansMMFontData` 提供了多主字体的支持，允许通过参数调整字体的粗细和宽度。这在需要动态调整字体样式的场景中非常有用，例如在 PDF 表单中根据用户输入调整字体样式。

### 总结

`CORE_FXGE_FONTDATA_CHROMEFONTDATA_CHROMEFONTDATA_H_` 文件通过定义一系列嵌入式字体数据，确保了 PDFium 在不同平台和环境下的字体渲染能力。这些字体数据不仅提供了默认字体支持，还增强了跨平台一致性，特别适用于嵌入式系统和移动设备。通过将字体数据嵌入到代码库中，PDFium 能够在没有外部字体的情况下依然正确显示和渲染 PDF 文档中的文本。 / Copyright 2015 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef CORE_FXGE_FONTDATA_CHROMEFONTDATA_CHROMEFONTDATA_H_
#define CORE_FXGE_FONTDATA_CHROMEFONTDATA_CHROMEFONTDATA_H_

#include <stdint.h>

#include <array>

extern const std::array<uint8_t, 18746> kFoxitFixedItalicFontData;
extern const std::array<uint8_t, 17597> kFoxitFixedFontData;
extern const std::array<uint8_t, 16339> kFoxitSansItalicFontData;
extern const std::array<uint8_t, 15025> kFoxitSansFontData;
extern const std::array<uint8_t, 21227> kFoxitSerifItalicFontData;
extern const std::array<uint8_t, 19469> kFoxitSerifFontData;
extern const std::array<uint8_t, 19151> kFoxitFixedBoldItalicFontData;
extern const std::array<uint8_t, 18055> kFoxitFixedBoldFontData;
extern const std::array<uint8_t, 16418> kFoxitSansBoldItalicFontData;
extern const std::array<uint8_t, 16344> kFoxitSansBoldFontData;
extern const std::array<uint8_t, 20733> kFoxitSerifBoldItalicFontData;
extern const std::array<uint8_t, 19395> kFoxitSerifBoldFontData;
extern const std::array<uint8_t, 16729> kFoxitSymbolFontData;
extern const std::array<uint8_t, 29513> kFoxitDingbatsFontData;
extern const std::array<uint8_t, 113417> kFoxitSerifMMFontData;
extern const std::array<uint8_t, 66919> kFoxitSansMMFontData;

#endif  // CORE_FXGE_FONTDATA_CHROMEFONTDATA_CHROMEFONTDATA_H_
